package com.katze.boot.plugins.redis.service;

import org.springframework.security.core.userdetails.UserDetails;

import java.util.Set;
import java.util.function.Function;

public interface CacheService {

    /**
     * 登录时获取用户信息, 优先从缓存中加载用户信息，若不存在则从数据库中读取，并重新缓存
     * @param username 用户名
     */
    <T extends UserDetails>T loadUserByUsername(String username, Class<T> cs);

    /**
     * 从缓存中获取用户
     *
     * @param username 用户名
     * @return User
     */
    <T extends UserDetails> Function<Function<String, T>, T> getUserDetails(String username, Class<T> cs);

    /**
     * 删除用户信息
     *
     * @param username 用户名
     */
    void clearUserCache(String username);

    /**
     * 缓存用户Token信息并添加在线用户
     */
    void saveToken(String username, String value, long timeout);

    /**
     * 获取用户token
     */
    String getToken(String key);

    /**
     * 删除用户token
     */
    @Deprecated
    Boolean deleteToken(String key);

    /**
     * 添加在线用户
     */
    @Deprecated
    Boolean saveActiveUser(String value, double score);

    /**
     * 获取全部在线用户
     */
    Set<String> getAllActiveUser();

    /**
     * 删除指定在线用户
     */
    @Deprecated
    Long deleteActiveUser(String value);

    /**
     * 清除过时在线用户信息
     */
    Long clearInvalidActiveUser();

    /**
     * 用户退出系统
     * @param username 用户名
     */
    void logout(String username);
}
